package cn.test;


/**
 * @ClassName Transcript
 * @Description TODO
 * @Author 郑万富
 * @Date 2020/11/14 10:14
 * @Version 1.0
 */
/**
 * 现在小C想自行写一个Java程序可以自由输入各科成绩，并且可以进行一些操作，各科成绩等级评定、排序、求平均分等。
 */


/***
 * 问题：请根据小C期末考试各科成绩从大到小依次输出、并输出小C本学期成绩的平均分，例如：
 * 各科成绩排序：Java 95    军事理论 91    算法 90    高数 88    英语 85    体育 79    毛概 59
 * 平均分：71.0
 */

import java.util.*;

/**
 * 考察知识点：流程控制语句的应用，输入流类的应用（Scanner），数组/集合容器类HashMap类的应用,以及排序算法的使用。
 */
public class Transcript {
    private int courseNumber;//科目数
    private String courseName;//科目名称
    private Integer averageScores;//平均分
    private Integer Scores;//科目分数
    private Integer ScoreSum=0;
    public void Test(){
        System.out.print("请输入你要录入成绩的科目数量：");
        Scanner Sc = new Scanner(System.in);
        courseNumber = Sc.nextInt();
        HashMap<String, Integer> map = new HashMap<>();
        for (int i = 0; i < courseNumber; i++) {
            Scanner sc = new Scanner(System.in);
            System.out.print("科目名：");
            courseName = sc.nextLine();
            System.out.print("分数：");
            Scores=sc.nextInt();
            if(Scores<0||Scores>100){
                System.out.println("输入成绩不合法，请重新输入：");
                Scores=sc.nextInt();
            }
            map.put(courseName,Scores);

        }
        System.out.println("size: "+map.size());
        Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
        System.out.println("各科成绩排序前：");
        for (Map.Entry<String, Integer> me:entrySet){
            String key = me.getKey();
            Integer value = me.getValue();
            ScoreSum+=me.getValue();
            System.out.print(key+"  "+value+"  ");
        }
        averageScores=ScoreSum/courseNumber;
        List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
        Collections.sort(list, (o1, o2) -> o1.getValue().compareTo(o2.getValue()));
        //注意这里遍历的是list，也就是我们将map.Entry放进了list，排序后的集合
        System.out.println();
        System.out.println("各科成绩排序后：");
        for (Map.Entry s : list)
        {
            System.out.print(s.getKey()+"  "+s.getValue()+"  ");
        }
        System.out.println();
        System.out.println("平均分："+averageScores);
    }

}
